/**
 * 研发项目资源版本模型
 * 
 * 项目资源和文档关系说明：
 * 1. 资源(RESOURCE_TYPE)是一个统一的概念，包含了所有项目相关的文件资源
 * 2. 文档(DOCUMENT_TYPE)是对部分资源类型的进一步细分和补充定义
 * 3. 元器件规格书、原理图、PCB文件、作业指导书等同时属于资源类型和文档类型
 * 4. 资源类型和文档类型之间存在映射关系，便于系统内统一管理
 * 5. 不同资源类型可以有特定属性，如PCB的层数、BOM的物料数量等
 */
const { BaseModel } = require('../config/models_config');

class ResearchProjectResourceModel extends BaseModel {

	constructor() {
		super();
		this.setCollection('research_project_resource');
	}
	
	/**
	 * 获取资源类型名称
	 * @param {Number} type 资源类型
	 * @returns {String} 资源类型名称
	 */
	static getResourceTypeName(type) {
		return this.RESOURCE_TYPE_NAME[type] || '未知';
	}
	
	/**
	 * 获取版本状态名称
	 * @param {Number} status 版本状态
	 * @returns {String} 版本状态名称
	 */
	static getVersionStatusName(status) {
		return this.VERSION_STATUS_NAME[status] || '未知';
	}
	
	/**
	 * 获取文档类型名称
	 * @param {Number} type 文档类型
	 * @returns {String} 文档类型名称
	 */
	static getDocumentTypeName(type) {
		return this.DOCUMENT_TYPE_NAME[type] || '未知';
	}
	
	/**
	 * 判断资源类型是否为文档
	 * @param {Number} resourceType 资源类型
	 * @returns {Boolean} 是否为文档
	 */
	static isDocumentResource(resourceType) {
		// PCB和BOM是特殊资源类型，非文档类型
		return resourceType !== this.RESOURCE_TYPE.PCB && 
			   resourceType !== this.RESOURCE_TYPE.BOM;
	}
}

// 资源类型
ResearchProjectResourceModel.RESOURCE_TYPE = {
	PCB: 0, // PCB
	BOM: 1, // BOM
	PACKAGE: 2, // 包装指引
	PROCESSING: 3, // 加工指引 
	MATERIAL_CHANGE: 4, // 物料变更通知
	RECOGNITION_REPORT: 5, // 认证报告
	TEST_REPORT: 6, // 测试报告
	TEST_GUIDE: 7, // 测试指引
	PRODUCT_SPEC: 8, // 产品规格书
	CODE: 9, // 代码
	BURN_FILE: 10, // 烧录文件
	STRUCTURE: 11, // 结构
	CUSTOMER_FILE: 12, // 客户文件
	COMPONENT_SPEC: 13, // 元器件规格书
	SCHEMATIC: 14, // 原理图
	OPERATION_GUIDE: 15, // 作业指导书
	OTHER: 16, // 其他
};

// 资源类型名称
ResearchProjectResourceModel.RESOURCE_TYPE_NAME = {
	[ResearchProjectResourceModel.RESOURCE_TYPE.PCB]: 'PCB',
	[ResearchProjectResourceModel.RESOURCE_TYPE.BOM]: 'BOM',
	[ResearchProjectResourceModel.RESOURCE_TYPE.PACKAGE]: '包装指引',
	[ResearchProjectResourceModel.RESOURCE_TYPE.PROCESSING]: '加工指引',
	[ResearchProjectResourceModel.RESOURCE_TYPE.MATERIAL_CHANGE]: '物料变更通知',
	[ResearchProjectResourceModel.RESOURCE_TYPE.RECOGNITION_REPORT]: '认证报告',
	[ResearchProjectResourceModel.RESOURCE_TYPE.TEST_REPORT]: '测试报告',
	[ResearchProjectResourceModel.RESOURCE_TYPE.TEST_GUIDE]: '测试指引',
	[ResearchProjectResourceModel.RESOURCE_TYPE.PRODUCT_SPEC]: '产品规格书',
	[ResearchProjectResourceModel.RESOURCE_TYPE.CODE]: '代码',
	[ResearchProjectResourceModel.RESOURCE_TYPE.BURN_FILE]: '烧录文件',
	[ResearchProjectResourceModel.RESOURCE_TYPE.STRUCTURE]: '结构',
	[ResearchProjectResourceModel.RESOURCE_TYPE.CUSTOMER_FILE]: '客户文件',
	[ResearchProjectResourceModel.RESOURCE_TYPE.COMPONENT_SPEC]: '元器件规格书',
	[ResearchProjectResourceModel.RESOURCE_TYPE.SCHEMATIC]: '原理图',
	[ResearchProjectResourceModel.RESOURCE_TYPE.OPERATION_GUIDE]: '作业指导书',
	[ResearchProjectResourceModel.RESOURCE_TYPE.OTHER]: '其他',
};

// 版本状态
ResearchProjectResourceModel.VERSION_STATUS = {
	DRAFT: 0, // 草稿
	RELEASED: 1, // 已发布
	PRODUCTION: 2, // 生产版本
	CUSTOMER_APPROVED: 3, // 客户确认版本
	DEPRECATED: 4, // 已废弃
};

// 版本状态名称
ResearchProjectResourceModel.VERSION_STATUS_NAME = {
	[ResearchProjectResourceModel.VERSION_STATUS.DRAFT]: '草稿',
	[ResearchProjectResourceModel.VERSION_STATUS.RELEASED]: '已发布',
	[ResearchProjectResourceModel.VERSION_STATUS.PRODUCTION]: '生产版本',
	[ResearchProjectResourceModel.VERSION_STATUS.CUSTOMER_APPROVED]: '客户确认版本',
	[ResearchProjectResourceModel.VERSION_STATUS.DEPRECATED]: '已废弃',
};

// 文档类型
ResearchProjectResourceModel.DOCUMENT_TYPE = {
	PACKAGE_GUIDE: 0, // 包装指引
	PROCESSING_GUIDE: 1, // 加工指引
	MATERIAL_CHANGE_NOTICE: 2, // 物料变更通知
	RECOGNITION_REPORT: 3, // 认证报告
	TEST_REPORT: 4, // 测试报告
	TEST_GUIDE: 5, // 测试指引
	PRODUCT_SPEC: 6, // 产品规格书
	CODE: 7, // 代码
	BURN_FILE: 8, // 烧录文件
	STRUCTURE: 9, // 结构
	CUSTOMER_FILE: 10, // 客户文件
	COMPONENT_SPEC: 11, // 元器件规格书
	SCHEMATIC: 12, // 原理图
	PCB_FILE: 13, // PCB文件
	OPERATION_GUIDE: 14, // 作业指导书
	OTHER: 15, // 其他
};

// 资源类型与文档类型的映射关系
ResearchProjectResourceModel.RESOURCE_TO_DOCUMENT_TYPE = {
	[ResearchProjectResourceModel.RESOURCE_TYPE.PACKAGE]: ResearchProjectResourceModel.DOCUMENT_TYPE.PACKAGE_GUIDE,
	[ResearchProjectResourceModel.RESOURCE_TYPE.PROCESSING]: ResearchProjectResourceModel.DOCUMENT_TYPE.PROCESSING_GUIDE,
	[ResearchProjectResourceModel.RESOURCE_TYPE.MATERIAL_CHANGE]: ResearchProjectResourceModel.DOCUMENT_TYPE.MATERIAL_CHANGE_NOTICE,
	[ResearchProjectResourceModel.RESOURCE_TYPE.RECOGNITION_REPORT]: ResearchProjectResourceModel.DOCUMENT_TYPE.RECOGNITION_REPORT,
	[ResearchProjectResourceModel.RESOURCE_TYPE.TEST_REPORT]: ResearchProjectResourceModel.DOCUMENT_TYPE.TEST_REPORT,
	[ResearchProjectResourceModel.RESOURCE_TYPE.TEST_GUIDE]: ResearchProjectResourceModel.DOCUMENT_TYPE.TEST_GUIDE,
	[ResearchProjectResourceModel.RESOURCE_TYPE.PRODUCT_SPEC]: ResearchProjectResourceModel.DOCUMENT_TYPE.PRODUCT_SPEC,
	[ResearchProjectResourceModel.RESOURCE_TYPE.CODE]: ResearchProjectResourceModel.DOCUMENT_TYPE.CODE,
	[ResearchProjectResourceModel.RESOURCE_TYPE.BURN_FILE]: ResearchProjectResourceModel.DOCUMENT_TYPE.BURN_FILE,
	[ResearchProjectResourceModel.RESOURCE_TYPE.STRUCTURE]: ResearchProjectResourceModel.DOCUMENT_TYPE.STRUCTURE,
	[ResearchProjectResourceModel.RESOURCE_TYPE.CUSTOMER_FILE]: ResearchProjectResourceModel.DOCUMENT_TYPE.CUSTOMER_FILE,
	[ResearchProjectResourceModel.RESOURCE_TYPE.COMPONENT_SPEC]: ResearchProjectResourceModel.DOCUMENT_TYPE.COMPONENT_SPEC,
	[ResearchProjectResourceModel.RESOURCE_TYPE.SCHEMATIC]: ResearchProjectResourceModel.DOCUMENT_TYPE.SCHEMATIC,
	[ResearchProjectResourceModel.RESOURCE_TYPE.PCB]: ResearchProjectResourceModel.DOCUMENT_TYPE.PCB_FILE,
	[ResearchProjectResourceModel.RESOURCE_TYPE.OPERATION_GUIDE]: ResearchProjectResourceModel.DOCUMENT_TYPE.OPERATION_GUIDE,
	[ResearchProjectResourceModel.RESOURCE_TYPE.OTHER]: ResearchProjectResourceModel.DOCUMENT_TYPE.OTHER,
};

/**
 * 将资源类型转换为文档类型
 * @param {Number} resourceType 资源类型
 * @returns {Number} 文档类型
 */
ResearchProjectResourceModel.convertResourceTypeToDocType = function(resourceType) {
	return this.RESOURCE_TO_DOCUMENT_TYPE[resourceType] || this.DOCUMENT_TYPE.OTHER;
};

// 文档类型名称
ResearchProjectResourceModel.DOCUMENT_TYPE_NAME = {
	[ResearchProjectResourceModel.DOCUMENT_TYPE.PACKAGE_GUIDE]: '包装指引',
	[ResearchProjectResourceModel.DOCUMENT_TYPE.PROCESSING_GUIDE]: '加工指引',
	[ResearchProjectResourceModel.DOCUMENT_TYPE.MATERIAL_CHANGE_NOTICE]: '物料变更通知',
	[ResearchProjectResourceModel.DOCUMENT_TYPE.RECOGNITION_REPORT]: '认证报告',
	[ResearchProjectResourceModel.DOCUMENT_TYPE.TEST_REPORT]: '测试报告',
	[ResearchProjectResourceModel.DOCUMENT_TYPE.TEST_GUIDE]: '测试指引',
	[ResearchProjectResourceModel.DOCUMENT_TYPE.PRODUCT_SPEC]: '产品规格书',
	[ResearchProjectResourceModel.DOCUMENT_TYPE.CODE]: '代码',
	[ResearchProjectResourceModel.DOCUMENT_TYPE.BURN_FILE]: '烧录文件',
	[ResearchProjectResourceModel.DOCUMENT_TYPE.STRUCTURE]: '结构',
	[ResearchProjectResourceModel.DOCUMENT_TYPE.CUSTOMER_FILE]: '客户文件',
	[ResearchProjectResourceModel.DOCUMENT_TYPE.COMPONENT_SPEC]: '元器件规格书',
	[ResearchProjectResourceModel.DOCUMENT_TYPE.SCHEMATIC]: '原理图',
	[ResearchProjectResourceModel.DOCUMENT_TYPE.PCB_FILE]: 'PCB',
	[ResearchProjectResourceModel.DOCUMENT_TYPE.OPERATION_GUIDE]: '作业指导书',
	[ResearchProjectResourceModel.DOCUMENT_TYPE.OTHER]: '其他',
};

// 数据结构定义
ResearchProjectResourceModel.DB_STRUCTURE = {
	_id: 'string|true',
	RESOURCE_ID: 'string|true|comment=资源ID',
	RESOURCE_NAME: 'string|true|comment=资源名称',
	RESOURCE_TYPE: 'int|true|comment=资源类型：0=PCB,1=BOM,2=包装指引,3=加工指引,4=物料变更通知,5=认证报告,6=测试报告,7=测试指引,8=产品规格书,9=代码,10=烧录文件,11=结构,12=客户文件,13=元器件规格书,14=原理图,15=作业指导书,16=其他',
	RESOURCE_DESC: 'string|false|comment=资源描述',
	
	PROJECT_ID: 'string|true|comment=所属项目ID',
	PROJECT_CODE: 'string|true|comment=所属项目编码',
	PROJECT_NAME: 'string|true|comment=所属项目名称',
	
	VERSION: 'string|true|comment=版本号',
	VERSION_DESC: 'string|false|comment=版本说明',
	VERSION_STATUS: 'int|true|default=0|comment=版本状态：0=草稿,1=已发布,2=生产版本,3=客户确认版本,4=已废弃',
	VERSION_TAGS: 'array|true|default=[]|comment=版本标签',
	
	FILE_URL: 'string|false|comment=文件链接',
	FILE_SIZE: 'int|false|comment=文件大小',
	FILE_TYPE: 'string|false|comment=文件类型',
	FILE_MD5: 'string|false|comment=文件MD5',
	
	DOCUMENT_TYPE: 'int|false|comment=文档类型（当资源类型为文档时有效）',
	DOCUMENT_STATUS: 'int|false|comment=文档状态（当资源类型为文档时有效）',
	
	PARENT_VERSION: 'string|false|comment=父版本',
	BRANCH_ID: 'string|false|comment=所属分支ID',
	BRANCH_NAME: 'string|false|comment=所属分支名称',
	
	GITEA_REPO: 'string|false|comment=Gitea仓库',
	GITEA_COMMIT: 'string|false|comment=Gitea提交ID',
	GITEA_TAG: 'string|false|comment=Gitea标签',
	
	STATE_HISTORY_ID: 'string|false|comment=关联的状态历史ID',
	
	IS_CURRENT: 'int|true|default=0|comment=是否为当前版本：0=否,1=是',
	IS_RELEASED: 'int|true|default=0|comment=是否为发布版本：0=否,1=是',
	IS_DELETED: 'int|true|default=0|comment=是否已删除：0=否,1=是',
	
	CREATOR_ID: 'string|true|comment=创建人ID',
	CREATOR_NAME: 'string|true|comment=创建人姓名',
	CREATE_TIME: 'int|true|comment=创建时间',
	UPDATE_TIME: 'int|true|comment=更新时间',
	
	REVIEW_STATUS: 'int|false|comment=审核状态：0=未审核,1=审核中,2=审核通过,3=审核不通过',
	REVIEWER_ID: 'string|false|comment=审核人ID',
	REVIEWER_NAME: 'string|false|comment=审核人姓名',
	REVIEW_TIME: 'int|false|comment=审核时间',
	REVIEW_NOTES: 'string|false|comment=审核备注',
	
	// PCB特有属性
	PCB_LAYERS: 'int|false|comment=PCB层数',
	PCB_SIZE: 'string|false|comment=PCB尺寸',
	PCB_MATERIAL: 'string|false|comment=PCB材料',
	
	// BOM特有属性
	BOM_COUNT: 'int|false|comment=BOM物料数量',
	BOM_TOTAL_COST: 'number|false|comment=BOM总成本',
	
	// 软件特有属性
	SOFTWARE_BUILD_NUMBER: 'string|false|comment=软件构建号',
	SOFTWARE_PLATFORM: 'string|false|comment=软件平台',
	SOFTWARE_LANGUAGE: 'string|false|comment=软件语言',
	
	// 关联信息
	SNAPSHOT_IDS: 'array|true|default=[]|comment=包含此资源的快照ID',
	RELATED_RESOURCES: 'array|true|default=[]|comment=关联资源',
	/*
	[
		{
			RESOURCE_ID: 'string', // 资源ID
			RESOURCE_NAME: 'string', // 资源名称
			RESOURCE_TYPE: 'number', // 资源类型
			VERSION: 'string', // 版本号
			RELATION_TYPE: 'number', // 关联类型：1=依赖,2=被依赖,3=包含,4=被包含,5=其他
		}
	]
	*/
};

module.exports = ResearchProjectResourceModel; 